//
//  QGUserAccount.swift
//  斯威夫特微博
//
//  Created by youyoumacmini3 on 2017/7/13.
//  Copyright © 2017年 youyoumacmini3. All rights reserved.
//

import UIKit

private let accountFile: NSString = "useraccount.json"

/// 用户账户信息
class QGUserAccount: NSObject {

    // 访问令牌
    var access_token: String?
    // 用户代号
    var uid: String?
    // 过期日期
    // 开发者 5 年 （不变）    使用者 3 天(第一次登陆开始算，以后会递减)
    var expires_in: TimeInterval = 0 {
        didSet{
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    // 过期日期
    var expiresDate: Date?
    
    // 用户昵称
    var screen_name:String?
    // 用户头像
    var avatar_large:String?
    
    
    
    
    
    
    
    
    override var description: String {
        return yy_modelDescription()
    }
    
    override init() {
        super.init()
        
        //从磁盘加载保存的文件 -> 字典
        // 1. 加载磁盘文件到二进制数据，如果失败直接返回
        guard let path = accountFile.cz_appendDocumentDir(),
              let data = NSData(contentsOfFile: path),
        let dic = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String: Any] else { return }

        // 2. 使用字典设置属性值
        yy_modelSet(with: dic ?? [:])
        
        //expiresDate = Date(timeIntervalSinceNow: -3600 * 24)//测试用
        // 3. 判断 access_token 是否过期
        if expiresDate?.compare(Date()) != .orderedDescending {
            print("账户过期")
            
            // 清空 access_token
            access_token = nil
            uid = nil
            
            // 删除账户文件
            _ = try? FileManager.default.removeItem(atPath: path)
        }
    }
    
    
    /*
     1. 偏好设置 （小） - xcode8.0 beta无效
     2. 沙盒 - 归档/plist/json
     3. 数据库  （FMDB/CoreData）
     4. 钥匙串访问 （小/自动加密 - 需要使用框架 SSHKeyChain）
     */
    
    
    func saveAccount() {
        
        // 1.模型转字典
        var dic = (self.yy_modelToJSONObject() as? [String: Any]) ?? [:]
        
        // 需要删除 expires_in
        dic.removeValue(forKey: "expires_in")
        
        // 2.字典序列化 data
        guard let data = try? JSONSerialization.data(withJSONObject: dic, options: []),
              let filePath = accountFile.cz_appendDocumentDir() else{ return }
        
        // 3.写入磁盘
        (data as NSData).write(toFile: filePath, atomically: true)
        
        print("用户账户保存成功\(filePath)")
    }
    
    
    
}
